package com.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;

import com.interceptor.AuthorizationInterceptor;

/**
 * 配置类：InterceptorConfig
 * 功能：配置Spring MVC的拦截器和静态资源路径。
 * 详细：该类配置了自定义的AuthorizationInterceptor拦截器，应用于所有请求路径，并排除了静态资源路径。
 *       同时，重写了addResourceHandlers方法，确保Spring Boot 2.0及以上版本能够正确访问静态资源。
 *
 *
 * 作者：team10
 */
@Configuration
public class InterceptorConfig extends WebMvcConfigurationSupport {

	/**
	 * 获取AuthorizationInterceptor实例
	 *
	 * @return AuthorizationInterceptor
	 */
	@Bean
	public AuthorizationInterceptor getAuthorizationInterceptor() {
		return new AuthorizationInterceptor();
	}

	/**
	 * 配置拦截器，设置拦截的路径和排除的路径
	 *
	 * @param registry InterceptorRegistry，用于注册拦截器
	 */
	@Override
	public void addInterceptors(InterceptorRegistry registry) {
		// 设置拦截所有请求，排除静态资源路径
		registry.addInterceptor(getAuthorizationInterceptor()).addPathPatterns("/**").excludePathPatterns("/static/**");
		super.addInterceptors(registry);
	}

	/**
	 * 配置静态资源路径
	 *
	 * 说明：Spring Boot 2.0之后需要手动配置静态资源路径
	 *
	 * @param registry ResourceHandlerRegistry，用于注册资源处理器
	 */
	@Override
	public void addResourceHandlers(ResourceHandlerRegistry registry) {
		// 配置多个静态资源路径
		registry.addResourceHandler("/**")
				.addResourceLocations("classpath:/resources/")
				.addResourceLocations("classpath:/static/")
				.addResourceLocations("classpath:/admin/")
				.addResourceLocations("classpath:/front/")
				.addResourceLocations("classpath:/public/");
		super.addResourceHandlers(registry);
	}
}
